🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / node / src / commonMain / kotlin / org / meshtastic / feature / node / component / CompassBottomSheet.kt
Displaying Raw • Download
feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/CompassBottomSheet.kt 2d20cd8a4708e2ef66e98d5259f3a97ec93f240a (2d20cd8a) Text, 18.53 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3OptInTb4b4b4(Te6edf3ExperimentalMaterial3ExpressiveApiTff7b72::Te6edf3classTb4b4b4)
Tff7b72package T7ee787org.meshtastic.feature.node.component
Tff7b72import T7ee787androidx.compose.foundation.Canvas
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Column
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.Spacer
Tff7b72import T7ee787androidx.compose.foundation.layout.aspectRatio
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.width
Tff7b72import T7ee787androidx.compose.material3.Button
Tff7b72import T7ee787androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.Surface
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.LaunchedEffect
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.geometry.Offset
Tff7b72import T7ee787androidx.compose.ui.geometry.Size
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787androidx.compose.ui.graphics.Path
Tff7b72import T7ee787androidx.compose.ui.graphics.StrokeCap
Tff7b72import T7ee787androidx.compose.ui.graphics.drawscope.DrawScope
Tff7b72import T7ee787androidx.compose.ui.graphics.drawscope.Stroke
Tff7b72import T7ee787androidx.compose.ui.graphics.drawscope.rotate
Tff7b72import T7ee787androidx.compose.ui.graphics.drawscope.withTransform
Tff7b72import T7ee787androidx.compose.ui.hapticfeedback.HapticFeedbackType
Tff7b72import T7ee787androidx.compose.ui.platform.LocalHapticFeedback
Tff7b72import T7ee787androidx.compose.ui.text.TextStyle
Tff7b72import T7ee787androidx.compose.ui.text.drawText
Tff7b72import T7ee787androidx.compose.ui.text.font.FontWeight
Tff7b72import T7ee787androidx.compose.ui.text.rememberTextMeasurer
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787androidx.compose.ui.unit.sp
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.common.util.formatString
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.compass_bearing
Tff7b72import T7ee787org.meshtastic.core.resources.compass_bearing_na
Tff7b72import T7ee787org.meshtastic.core.resources.compass_distance
Tff7b72import T7ee787org.meshtastic.core.resources.compass_location_disabled
Tff7b72import T7ee787org.meshtastic.core.resources.compass_no_location_fix
Tff7b72import T7ee787org.meshtastic.core.resources.compass_no_location_permission
Tff7b72import T7ee787org.meshtastic.core.resources.compass_no_magnetometer
Tff7b72import T7ee787org.meshtastic.core.resources.compass_title
Tff7b72import T7ee787org.meshtastic.core.resources.compass_uncertainty
Tff7b72import T7ee787org.meshtastic.core.resources.compass_uncertainty_unknown
Tff7b72import T7ee787org.meshtastic.core.resources.elevation_suffix
Tff7b72import T7ee787org.meshtastic.core.resources.exchange_position
Tff7b72import T7ee787org.meshtastic.core.resources.last_position_update
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ErrorOutline
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MyLocation
Tff7b72import T7ee787org.meshtastic.feature.node.compass.CompassUiState
Tff7b72import T7ee787org.meshtastic.feature.node.compass.CompassWarning
Tff7b72import T7ee787kotlin.math.PI
Tff7b72import T7ee787kotlin.math.cos
Tff7b72import T7ee787kotlin.math.sin
Tff7b72private Tff7b72const Tff7b72val Te6edf3DIAL_WIDTH_FRACTION Tff7b72= T79c0ff0.66f
Tf0883e@Composable
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72fun Td2a8ffCompassSheetContentTb4b4b4(
Te6edf3uiStateTb4b4b4: Te6edf3CompassUiStateTb4b4b4,
Te6edf3onRequestLocationPermissionTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onOpenLocationSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onRequestPositionTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3haptics Tff7b72= Te6edf3LocalHapticFeedbackTb4b4b4.Te6edf3current
Te6edf3LaunchedEffectTb4b4b4(Te6edf3uiStateTb4b4b4.Te6edf3isAlignedTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3uiStateTb4b4b4.Te6edf3isAlignedTb4b4b4) Te6edf3hapticsTb4b4b4.Te6edf3performHapticFeedbackTb4b4b4(Te6edf3HapticFeedbackTypeTb4b4b4.Te6edf3LongPressTb4b4b4)
Tb4b4b4}
Te6edf3ColumnTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_titleTb4b4b4)Tb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3headlineSmallTb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3targetNameTb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleMediumEmphasizedTb4b4b4,
Te6edf3color Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3targetColorTb4b4b4,
Tb4b4b4)
Te6edf3CompassDialTb4b4b4(
Te6edf3heading Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3headingTb4b4b4,
Te6edf3bearing Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3bearingTb4b4b4,
Te6edf3angularErrorDeg Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3angularErrorDegTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Te6edf3DIAL_WIDTH_FRACTIONTb4b4b4)Tb4b4b4.Te6edf3aspectRatioTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Te6edf3markerColor Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3targetColorTb4b4b4,
Tb4b4b4)
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceEvenlyTb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_distanceTb4b4b4, Te6edf3uiStateTb4b4b4.Te6edf3distanceText Tff7b72?: Ta5d6ff"Ta5d6ff--Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Te6edf3uiStateTb4b4b4.Te6edf3bearingTextTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_bearingTb4b4b4, Tffa657itTb4b4b4) Tb4b4b4}
Tff7b72?: Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_bearing_naTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Te6edf3uiStateTb4b4b4.Te6edf3errorRadiusTextTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3radius Tff7b72-Tff7b72>
Tff7b72val Te6edf3angle Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3angularErrorDegTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3formatStringTb4b4b4(Ta5d6ff"Ta5d6ff%.0f°Ta5d6ff"Tb4b4b4, Tffa657itTb4b4b4) Tb4b4b4} Tff7b72?: Ta5d6ff"Ta5d6ff?Ta5d6ff"
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_uncertaintyTb4b4b4, Te6edf3radiusTb4b4b4, Te6edf3angleTb4b4b4)
Tb4b4b4} Tff7b72?: Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_uncertainty_unknownTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
Te6edf3uiStateTb4b4b4.Te6edf3targetAltitudeTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3altitude Tff7b72-Tff7b72>
Te6edf3ElevationInfoTb4b4b4(
Te6edf3altitude Tff7b72= Te6edf3altitudeTb4b4b4,
Te6edf3system Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3displayUnitsTb4b4b4,
Te6edf3suffix Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3elevation_suffixTb4b4b4)Tb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3uiStateTb4b4b4.Te6edf3lastUpdateTextTff7b72?.Te6edf3let Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3last_position_updateTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff: Tffd700$Te6edf3itTa5d6ff"Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
T8b949e// Quick way to re-request a fresh fix without leaving the compass sheet
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onRequestPositionTb4b4b4, Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3MyLocationTb4b4b4, Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3exchange_positionTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3uiStateTb4b4b4.Te6edf3warningsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3WarningListTb4b4b4(
Te6edf3warnings Tff7b72= Te6edf3uiStateTb4b4b4.Te6edf3warningsTb4b4b4,
Te6edf3onRequestPermission Tff7b72= Te6edf3onRequestLocationPermissionTb4b4b4,
Te6edf3onOpenLocationSettings Tff7b72= Te6edf3onOpenLocationSettingsTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffWarningListTb4b4b4(
Te6edf3warningsTb4b4b4: Te6edf3ListTff7b72<Te6edf3CompassWarningTff7b72>Tb4b4b4,
Te6edf3onRequestPermissionTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onOpenLocationSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3verticalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3warningsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3warning Tff7b72-Tff7b72>
Te6edf3SurfaceTb4b4b4(
Te6edf3tonalElevation Tff7b72= T79c0ff2.Te6edf3dpTb4b4b4,
Te6edf3shape Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3shapesTb4b4b4.Te6edf3mediumTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3errorContainerTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ErrorOutlineTb4b4b4,
Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3tint Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onErrorContainerTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3warningTextTb4b4b4(Te6edf3warningTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onErrorContainerTb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3warningsTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3CompassWarningTb4b4b4.Te6edf3NO_LOCATION_PERMISSIONTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onRequestPermissionTb4b4b4, Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3MyLocationTb4b4b4, Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_no_location_permissionTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3warningsTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3CompassWarningTb4b4b4.Te6edf3LOCATION_DISABLEDTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onOpenLocationSettingsTb4b4b4, Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3MyLocationTb4b4b4, Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_location_disabledTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffwarningTextTb4b4b4(Te6edf3warningTb4b4b4: Te6edf3CompassWarningTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Tff7b72when Tb4b4b4(Te6edf3warningTb4b4b4) Tb4b4b4{
Te6edf3CompassWarningTb4b4b4.Te6edf3NO_MAGNETOMETER Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_no_magnetometerTb4b4b4)
Te6edf3CompassWarningTb4b4b4.Te6edf3NO_LOCATION_PERMISSION Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_no_location_permissionTb4b4b4)
Te6edf3CompassWarningTb4b4b4.Te6edf3LOCATION_DISABLED Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_location_disabledTb4b4b4)
Te6edf3CompassWarningTb4b4b4.Te6edf3NO_LOCATION_FIX Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3compass_no_location_fixTb4b4b4)
Tb4b4b4}
Tf0883e@Composable
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Td2a8ffCompassDialTb4b4b4(
Te6edf3headingTb4b4b4: Tffa657Float?Tb4b4b4,
Te6edf3bearingTb4b4b4: Tffa657Float?Tb4b4b4,
Te6edf3angularErrorDegTb4b4b4: Tffa657Float?Tb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Te6edf3markerColorTb4b4b4: Te6edf3Color Tff7b72= Te6edf3ColorTb4b4b4(T79c0ff0Te6edf3xFF2196F3Tb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3compassRoseColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primary
Tff7b72val Te6edf3tickColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurface
Tff7b72val Te6edf3cardinalColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primary
Tff7b72val Te6edf3degreeTextColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Tff7b72val Te6edf3northPointerColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3Red
Tff7b72val Te6edf3headingIndicatorColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3secondary
Tff7b72val Te6edf3textMeasurer Tff7b72= Te6edf3rememberTextMeasurerTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3cardinalStyle Tff7b72= Te6edf3TextStyleTb4b4b4(Te6edf3fontSize Tff7b72= T79c0ff2T79c0ff4.Te6edf3spTb4b4b4, Te6edf3fontWeight Tff7b72= Te6edf3FontWeightTb4b4b4.Te6edf3BoldTb4b4b4)
Tff7b72val Te6edf3degreeStyle Tff7b72= Te6edf3TextStyleTb4b4b4(Te6edf3fontSize Tff7b72= T79c0ff1T79c0ff2.Te6edf3spTb4b4b4, Te6edf3fontWeight Tff7b72= Te6edf3FontWeightTb4b4b4.Te6edf3MediumTb4b4b4)
Te6edf3CanvasTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3center Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3sizeTb4b4b4.Te6edf3width Tff7b72/ T79c0ff2fTb4b4b4, Te6edf3sizeTb4b4b4.Te6edf3height Tff7b72/ T79c0ff2fTb4b4b4)
Tff7b72val Te6edf3radius Tff7b72= Te6edf3sizeTb4b4b4.Te6edf3minDimension Tff7b72/ T79c0ff2f Tff7b72* T79c0ff0.88f
Tff7b72val Te6edf3ringStroke Tff7b72= T79c0ff3.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3currentHeading Tff7b72= Te6edf3heading Tff7b72?: T79c0ff0f
Tff7b72val Te6edf3currentBearing Tff7b72= Te6edf3bearing
Te6edf3rotateTb4b4b4(Tff7b72-Te6edf3currentHeadingTb4b4b4, Te6edf3centerTb4b4b4) Tb4b4b4{
T8b949e// Compass circles
Te6edf3drawCircleTb4b4b4(Te6edf3color Tff7b72= Te6edf3compassRoseColorTb4b4b4, Te6edf3radius Tff7b72= Te6edf3radiusTb4b4b4, Te6edf3center Tff7b72= Te6edf3centerTb4b4b4, Te6edf3style Tff7b72= Te6edf3StrokeTb4b4b4(Te6edf3width Tff7b72= Te6edf3ringStrokeTb4b4b4)Tb4b4b4)
Te6edf3drawCircleTb4b4b4(
Te6edf3color Tff7b72= Te6edf3compassRoseColorTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.35fTb4b4b4)Tb4b4b4,
Te6edf3radius Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.85fTb4b4b4,
Te6edf3center Tff7b72= Te6edf3centerTb4b4b4,
Te6edf3style Tff7b72= Te6edf3StrokeTb4b4b4(Te6edf3width Tff7b72= T79c0ff1.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
T8b949e// Tick marks
Tff7b72for Tb4b4b4(Te6edf3deg Tff7b72in T79c0ff0 Te6edf3until T79c0ff3T79c0ff6T79c0ff0 Te6edf3step T79c0ff5Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3isCardinal Tff7b72= Te6edf3deg Tff7b72% T79c0ff9T79c0ff0 Tff7b72=Tff7b72= T79c0ff0
Tff7b72val Te6edf3isMajor Tff7b72= Te6edf3deg Tff7b72% T79c0ff3T79c0ff0 Tff7b72=Tff7b72= T79c0ff0
Tff7b72val Te6edf3tickLength Tff7b72=
Tff7b72when Tb4b4b4{
Te6edf3isCardinal Tff7b72-Tff7b72> Te6edf3radius Tff7b72* T79c0ff0.14f
Te6edf3isMajor Tff7b72-Tff7b72> Te6edf3radius Tff7b72* T79c0ff0.09f
Tff7b72else Tff7b72-Tff7b72> Te6edf3radius Tff7b72* T79c0ff0.045f
Tb4b4b4}
Tff7b72val Te6edf3tickWidth Tff7b72=
Tff7b72when Tb4b4b4{
Te6edf3isCardinal Tff7b72-Tff7b72> T79c0ff3.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)
Te6edf3isMajor Tff7b72-Tff7b72> T79c0ff2.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)
Tff7b72else Tff7b72-Tff7b72> T79c0ff1.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3angle Tff7b72= Tb4b4b4(Te6edf3deg Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3outer Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3radius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3radius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3inner Tff7b72=
Te6edf3OffsetTb4b4b4(
Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3radius Tff7b72- Te6edf3tickLengthTb4b4b4) Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Tb4b4b4(Te6edf3radius Tff7b72- Te6edf3tickLengthTb4b4b4) Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3drawLineTb4b4b4(
Te6edf3color Tff7b72= Tff7b72if Tb4b4b4(Te6edf3deg Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Te6edf3northPointerColor Tff7b72else Te6edf3tickColorTb4b4b4,
Te6edf3start Tff7b72= Te6edf3innerTb4b4b4,
Te6edf3end Tff7b72= Te6edf3outerTb4b4b4,
Te6edf3strokeWidth Tff7b72= Te6edf3tickWidthTb4b4b4,
Te6edf3cap Tff7b72= Te6edf3StrokeCapTb4b4b4.Te6edf3RoundTb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// Compass rose center
Te6edf3drawCompassRoseCenterTb4b4b4(Te6edf3center Tff7b72= Te6edf3centerTb4b4b4, Te6edf3size Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.13fTb4b4b4, Te6edf3color Tff7b72= Te6edf3compassRoseColorTb4b4b4)
T8b949e// Cardinal labels (moved closer to center)
Tff7b72val Te6edf3cardinalRadius Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.48f
Tff7b72val Te6edf3cardinals Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3TripleTb4b4b4(Ta5d6ff"Ta5d6ffNTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3northPointerColorTb4b4b4)Tb4b4b4,
Te6edf3TripleTb4b4b4(Ta5d6ff"Ta5d6ffETa5d6ff"Tb4b4b4, T79c0ff9T79c0ff0Tb4b4b4, Te6edf3cardinalColorTb4b4b4)Tb4b4b4,
Te6edf3TripleTb4b4b4(Ta5d6ff"Ta5d6ffSTa5d6ff"Tb4b4b4, T79c0ff1T79c0ff8T79c0ff0Tb4b4b4, Te6edf3cardinalColorTb4b4b4)Tb4b4b4,
Te6edf3TripleTb4b4b4(Ta5d6ff"Ta5d6ffWTa5d6ff"Tb4b4b4, T79c0ff2T79c0ff7T79c0ff0Tb4b4b4, Te6edf3cardinalColorTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72for Tb4b4b4(Tb4b4b4(Te6edf3labelTb4b4b4, Te6edf3degTb4b4b4, Te6edf3colorTb4b4b4) Tff7b72in Te6edf3cardinalsTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3angle Tff7b72= Tb4b4b4(Te6edf3deg Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3x Tff7b72= Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3cardinalRadius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3y Tff7b72= Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3cardinalRadius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3layout Tff7b72= Te6edf3textMeasurerTb4b4b4.Te6edf3measureTb4b4b4(Te6edf3labelTb4b4b4, Te6edf3style Tff7b72= Te6edf3cardinalStyleTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3color Tff7b72= Te6edf3colorTb4b4b4)Tb4b4b4)
Te6edf3withTransformTb4b4b4(Tb4b4b4{ Te6edf3rotateTb4b4b4(Te6edf3currentHeadingTb4b4b4, Te6edf3OffsetTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3drawTextTb4b4b4(
Te6edf3textLayoutResult Tff7b72= Te6edf3layoutTb4b4b4,
Te6edf3topLeft Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3x Tff7b72- Te6edf3layoutTb4b4b4.Te6edf3sizeTb4b4b4.Te6edf3width Tff7b72/ T79c0ff2fTb4b4b4, Te6edf3y Tff7b72- Te6edf3layoutTb4b4b4.Te6edf3sizeTb4b4b4.Te6edf3height Tff7b72/ T79c0ff2fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// Degree labels
Tff7b72val Te6edf3degRadius Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.72f
Tff7b72for Tb4b4b4(Te6edf3d Tff7b72in T79c0ff0 Te6edf3until T79c0ff3T79c0ff6T79c0ff0 Te6edf3step T79c0ff3T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3angle Tff7b72= Tb4b4b4(Te6edf3d Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3x Tff7b72= Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3degRadius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3y Tff7b72= Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3degRadius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3layout Tff7b72= Te6edf3textMeasurerTb4b4b4.Te6edf3measureTb4b4b4(Te6edf3dTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3style Tff7b72= Te6edf3degreeStyleTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3color Tff7b72= Te6edf3degreeTextColorTb4b4b4)Tb4b4b4)
Te6edf3withTransformTb4b4b4(Tb4b4b4{ Te6edf3rotateTb4b4b4(Te6edf3currentHeadingTb4b4b4, Te6edf3OffsetTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3drawTextTb4b4b4(
Te6edf3textLayoutResult Tff7b72= Te6edf3layoutTb4b4b4,
Te6edf3topLeft Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3x Tff7b72- Te6edf3layoutTb4b4b4.Te6edf3sizeTb4b4b4.Te6edf3width Tff7b72/ T79c0ff2fTb4b4b4, Te6edf3y Tff7b72- Te6edf3layoutTb4b4b4.Te6edf3sizeTb4b4b4.Te6edf3height Tff7b72/ T79c0ff2fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// Bearing marker (adjust bearing by current heading because the canvas is rotated)
Tff7b72val Te6edf3bearingForDraw Tff7b72= Te6edf3currentBearing
Tff7b72if Tb4b4b4(Te6edf3bearingForDraw Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3angularErrorDeg Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3angularErrorDeg Tff7b72> T79c0ff0fTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3arcRadius Tff7b72= Te6edf3radius Tff7b72* T79c0ff0.82f
Tff7b72val Te6edf3startAngleNorth Tff7b72= Te6edf3bearingForDraw Tff7b72- Te6edf3angularErrorDeg
Tff7b72val Te6edf3sweep Tff7b72= Te6edf3angularErrorDeg Tff7b72* T79c0ff2f
Tff7b72val Te6edf3faint Tff7b72= Te6edf3markerColorTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.18fTb4b4b4)
T8b949e// Canvas drawArc: 0deg = 3 o'clock, +clockwise. Convert north=0° to that space.
Tff7b72val Te6edf3startAngleCanvas Tff7b72= Tb4b4b4(Te6edf3startAngleNorth Tff7b72- T79c0ff9T79c0ff0fTb4b4b4)Tb4b4b4.Te6edf3normalizeDegreesTb4b4b4(Tb4b4b4)
T8b949e// Filled wedge for the cone shading.
Te6edf3drawArcTb4b4b4(
Te6edf3color Tff7b72= Te6edf3faintTb4b4b4,
Te6edf3startAngle Tff7b72= Te6edf3startAngleCanvasTb4b4b4,
Te6edf3sweepAngle Tff7b72= Te6edf3sweepTb4b4b4,
Te6edf3useCenter Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3topLeft Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72- Te6edf3arcRadiusTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3arcRadiusTb4b4b4)Tb4b4b4,
Te6edf3size Tff7b72= Te6edf3SizeTb4b4b4(Te6edf3arcRadius Tff7b72* T79c0ff2Tb4b4b4, Te6edf3arcRadius Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4,
Tb4b4b4)
T8b949e// Cone edge lines for clarity
Tff7b72val Te6edf3edgeRadius Tff7b72= Te6edf3arcRadius
Tff7b72val Te6edf3startRad Tff7b72= Tb4b4b4(Te6edf3startAngleNorth Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3endRad Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3startAngleNorth Tff7b72+ Te6edf3sweepTb4b4b4) Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3startEnd Tff7b72=
Te6edf3OffsetTb4b4b4(
Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3edgeRadius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3startRadTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3edgeRadius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3startRadTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3endEnd Tff7b72=
Te6edf3OffsetTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3edgeRadius Tff7b72* Te6edf3sinTb4b4b4(Te6edf3endRadTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3edgeRadius Tff7b72* Te6edf3cosTb4b4b4(Te6edf3endRadTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3drawLineTb4b4b4(Te6edf3color Tff7b72= Te6edf3faintTb4b4b4, Te6edf3start Tff7b72= Te6edf3centerTb4b4b4, Te6edf3end Tff7b72= Te6edf3startEndTb4b4b4, Te6edf3strokeWidth Tff7b72= T79c0ff6fTb4b4b4, Te6edf3cap Tff7b72= Te6edf3StrokeCapTb4b4b4.Te6edf3RoundTb4b4b4)
Te6edf3drawLineTb4b4b4(Te6edf3color Tff7b72= Te6edf3faintTb4b4b4, Te6edf3start Tff7b72= Te6edf3centerTb4b4b4, Te6edf3end Tff7b72= Te6edf3endEndTb4b4b4, Te6edf3strokeWidth Tff7b72= T79c0ff6fTb4b4b4, Te6edf3cap Tff7b72= Te6edf3StrokeCapTb4b4b4.Te6edf3RoundTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3bearingForDraw Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3angle Tff7b72= Tb4b4b4(Te6edf3bearingForDraw Tff7b72* Te6edf3PI Tff7b72/ T79c0ff1T79c0ff8T79c0ff0.0Tb4b4b4)
Tff7b72val Te6edf3dot Tff7b72=
Te6edf3OffsetTb4b4b4(
Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Tb4b4b4(Te6edf3radius Tff7b72* T79c0ff0.95fTb4b4b4) Tff7b72* Te6edf3sinTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Tb4b4b4(Te6edf3radius Tff7b72* T79c0ff0.95fTb4b4b4) Tff7b72* Te6edf3cosTb4b4b4(Te6edf3angleTb4b4b4)Tb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3drawCircleTb4b4b4(Te6edf3color Tff7b72= Te6edf3markerColorTb4b4b4, Te6edf3radius Tff7b72= T79c0ff1T79c0ff0.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3center Tff7b72= Te6edf3dotTb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// Heading indicator as a simple line
Tff7b72if Tb4b4b4(Te6edf3heading Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3headingEnd Tff7b72= Te6edf3OffsetTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3xTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3radius Tff7b72* T79c0ff0.78fTb4b4b4)
Te6edf3drawLineTb4b4b4(
Te6edf3color Tff7b72= Te6edf3headingIndicatorColorTb4b4b4,
Te6edf3start Tff7b72= Te6edf3centerTb4b4b4,
Te6edf3end Tff7b72= Te6edf3headingEndTb4b4b4,
Te6edf3strokeWidth Tff7b72= T79c0ff6.Te6edf3dpTb4b4b4.Te6edf3toPxTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3cap Tff7b72= Te6edf3StrokeCapTb4b4b4.Te6edf3RoundTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Te6edf3DrawScopeTb4b4b4.Td2a8ffdrawCompassRoseCenterTb4b4b4(Te6edf3centerTb4b4b4: Te6edf3OffsetTb4b4b4, Te6edf3sizeTb4b4b4: Tffa657FloatTb4b4b4, Te6edf3colorTb4b4b4: Te6edf3ColorTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3path Tff7b72=
Te6edf3PathTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3moveToTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3xTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72- Te6edf3sizeTb4b4b4)
Te6edf3lineToTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72+ Te6edf3size Tff7b72* T79c0ff0.35fTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3yTb4b4b4)
Te6edf3lineToTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3xTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3y Tff7b72+ Te6edf3size Tff7b72* T79c0ff0.35fTb4b4b4)
Te6edf3lineToTb4b4b4(Te6edf3centerTb4b4b4.Te6edf3x Tff7b72- Te6edf3size Tff7b72* T79c0ff0.35fTb4b4b4, Te6edf3centerTb4b4b4.Te6edf3yTb4b4b4)
Te6edf3closeTb4b4b4(Tb4b4b4)
Tb4b4b4}
Te6edf3drawPathTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3colorTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.5fTb4b4b4)Tb4b4b4)
Te6edf3drawCircleTb4b4b4(Te6edf3color Tff7b72= Te6edf3colorTb4b4b4, Te6edf3radius Tff7b72= Te6edf3size Tff7b72* T79c0ff0.25fTb4b4b4, Te6edf3center Tff7b72= Te6edf3centerTb4b4b4)
Tb4b4b4}
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Te6edf3FloatTb4b4b4.Td2a8ffnormalizeDegreesTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Float Tb4b4b4{
Tff7b72val Te6edf3normalized Tff7b72= Tff7b72this Tff7b72% T79c0ff3T79c0ff6T79c0ff0f
Tff7b72return Tff7b72if Tb4b4b4(Te6edf3normalized Tff7b72< T79c0ff0fTb4b4b4) Te6edf3normalized Tff7b72+ T79c0ff3T79c0ff6T79c0ff0f Tff7b72else Te6edf3normalized
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.12s